﻿using Sunny.UI;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace Apple.SprayingProcessSystem
{
    public partial class UserCounterButton : UIUserControl
    {
        private UIStyle Style;
        private Color defaultFillColor;
        private Color defaultRectColor;

        public UserCounterButton()
        {
            InitializeComponent();
            // 绑定UI管理器的委托
            this.Load += UserCounterButton_Load;
        }

        private void UserCounterButton_Load(object? sender, EventArgs e)
        {
            UIExtension.SetStyleManager = SetStyle;  // 设置样式管理器

            defaultFillColor = btn_Counter.FillColor;  // 保存默认填充颜色
            defaultRectColor=btn_Counter.RectColor;  // 保存默认边框颜色
        }

        // 设置样式的方法
        private void SetStyle(UIStyleManager manager)
        {
            this.btn_Counter.Style = manager.Style;
            // 加载按钮时保存主题样式
            Style = manager.Style;
            if (CounterButtonState)
            {
                this.btn_Counter.FillColor = this.btn_Counter.FillPressColor;
                this.btn_Counter.FillColor2 = this.btn_Counter.FillPressColor;
                this.RectColor = this.btn_Counter.RectPressColor;
            }
        }

        private string buttonName = "空运行";

        [Browsable(true)] // 使属性可以暴露出来，显示到Winform窗口中
        [Category("自定义属性")]  // 属性分类
        [Description("按钮的名称")] // 属性描述
        public string ButtonName
        {
            get { return buttonName; }
            set
            {
                buttonName = value;
                this.btn_Counter.Text = buttonName;
            }
        }

        private int counterButtonSymbol = 61452;

        [Browsable(true)] // 使属性可以暴露出来，显示到Winform窗口中
        [Category("自定义属性")]  // 属性分类
        [Description("取反按钮标签")] // 属性描述
        public int CounterButtonSymbol
        {
            get { return counterButtonSymbol; }
            set
            {
                counterButtonSymbol = value;
                this.btn_Counter.Symbol = counterButtonSymbol;
            }
        }

        private bool counterButtonState;

        [Browsable(true)] // 使属性可以暴露出来，显示到Winform窗口中
        [Category("自定义属性")]  // 属性分类
        [Description("取反按钮状态")] // 属性描述
        public bool CounterButtonState
        {
            get { return counterButtonState; }
            set
            {
                counterButtonState = value;
                if (counterButtonState)
                {
                    // 填充颜色和边框颜色都设置为鼠标按下时的颜色
                    this.btn_Counter.FillColor = this.btn_Counter.FillPressColor;
                    this.btn_Counter.FillColor2 = this.btn_Counter.FillPressColor;
                    this.btn_Counter.RectColor = this.btn_Counter.RectPressColor;
                }
                else
                {
                    // 有两种情况 第一种是没有切换主题的状态,一种是切换了主题的状态
                    if (this.btn_Counter.Style.ToString() != Style.ToString())  // 如果按钮的主题不等于之前保存的主题
                    {
                        this.btn_Counter.Style = Style;  // 设置切换后的主题
                    }
                    else // 如果没有切换就恢复成原有的
                    {
                        this.btn_Counter.FillColor = defaultFillColor;
                        this.btn_Counter.FillColor2 = defaultFillColor;
                        this.btn_Counter.RectColor = defaultRectColor;
                    }
                }
            }
        }

        // 绑定变量的属性
        private string variableName = "";

        [Browsable(true)] // 使属性可以暴露出来，显示到Winform窗口中
        [Category("自定义属性")]  // 属性分类
        [Description("获取变量名称")] // 属性描述
        public string VariableName
        {
            get { return variableName; }
            set { variableName = value; }
        }

        [Browsable(true)] // 使属性可以暴露出来，显示到Winform窗口中
        [Category("自定义事件")]  // 属性分类
        [Description("单击事件")] // 属性描述
        public event EventHandler ClickEvent;
        private void btn_Counter_Click(object sender, EventArgs e)
        {
            ClickEvent?.Invoke(this, e);
        }



    }
}
